package ch.netcetera.planningpoker.client;

import ch.netcetera.planningpoker.client.ui.admin.create.CreateGamePresenter;
import ch.netcetera.planningpoker.client.ui.admin.moderate.ModerationPresenter;
import ch.netcetera.planningpoker.client.ui.admin.round.ModeratorRoundPresenter;
import ch.netcetera.planningpoker.client.ui.main.MainPagePresenter;
import ch.netcetera.planningpoker.client.ui.participant.create.CreateParticipantPresenter;
import ch.netcetera.planningpoker.client.ui.participant.play.PlayPresenter;
import ch.netcetera.planningpoker.client.ui.round.RoundPresenter;
import ch.netcetera.planningpoker.client.ui.widget.userlist.UserListPresenter;
import ch.netcetera.planningpoker.shared.GameRequestFactory;

import com.google.gwt.inject.client.AsyncProvider;
import com.google.gwt.inject.client.GinModules;
import com.google.gwt.inject.client.Ginjector;
import com.google.inject.Provider;
import com.google.web.bindery.event.shared.EventBus;
import com.gwtplatform.mvp.client.proxy.PlaceManager;

@GinModules({ PokerModule.class })
public interface PokerGinjector extends Ginjector {
    PlaceManager getPlaceManager();

    EventBus getEventBus();

    Provider<MainPagePresenter> getMainPagePresenter();
    
    AsyncProvider<CreateGamePresenter> getCreateGamePresenter();
    
    AsyncProvider<ModerationPresenter> getModerationPresenter();
    
    AsyncProvider<CreateParticipantPresenter> getCreateParticipantPresenter();
    
    AsyncProvider<PlayPresenter> getPlayPresenter();
    
    Provider<UserListPresenter> getUserListPresenter();
    
    Provider<ModeratorRoundPresenter> getModeratorRoundPresenter();
    
    Provider<RoundPresenter> getRoundPresenter();
    
    GameRequestFactory getGameRequestFactory();
}
